1 Making the database

1.1 The European fleet register

The EU fleet register (https://webgate.ec.europa.eu/fleet-europa/search_en) — which contains all historical records relating to fishing vessels flagged in EU Member States — was downloaded on 17 December 2021 with the following filters:

  • Country: ‘EU’
  • Period: ‘All vessels’
  • Search data context: ‘Search data in the whole history of the vessels’

The downloaded file was then processed. The first step was to load it:

# fleet <- read.csv2("https://www.dropbox.com/s/3xc7t2o76ccudqe/vesselRegistryListResults-2021_12_17.csv?dl=1", quote = "", stringsAsFactors = FALSE) 
fleet <- read.csv2("Data/Raw/vesselRegistryListResults-2021_12_17.csv", quote = "", stringsAsFactors = FALSE)
#Load raw data from EU website

1.1.1 Fixing incorrect records

We then proceeded with cleaning the fleet’s data. The first step was to fix the Register’s exported file, which contained 5 rows that did not tabulate correctly:

fleet <- fleet %>%
  filter(!LOA == "" & !Country.of.Registration == "\"\"") %>% #Set aside correct records
  bind_rows(fleet %>% #Deal with incorrect records (duplicate rows that incorrectly tabulated)
              filter(Country.of.Registration == "\"\"") %>% #Set aside first part of duplicate records
              select(c(Event:Power.of.main.engine)) %>%
              rename_at(vars(colnames(fleet %>% #Rename columns based on correct records
                                        filter(Country.of.Registration == "\"\"") %>%
                                        select(c(Event:Power.of.main.engine)))), 
                        ~ colnames(fleet %>%
                                     select(c(IRCS.indicator:ncol(.))))) %>%
              bind_cols(fleet %>% #Bind fixed duplicates with other part of duplicate records
                          filter(LOA == "") %>%
                          select(c(1:Name.of.vessel))) %>%
              mutate(Place.of.registration = "",
                     IRCS = "",
                     Hull.material = as.integer(Hull.material)))

1.1.2 Cleaning records

First, we selected the columns of interest and renamed them:

fleet <- fleet %>%
  select(country = Country.of.Registration, #Keep columns of interest and rename them
         cfr = CFR, 
         external_marking = External.marking,
         vessel_name = Name.of.vessel, 
         event_start_date = Event.Start.Date, 
         event_end_date = Event.End.Date, 
         gear_code = Main.fishing.gear,
         length = LOA,
         power = Power.of.main.engine)

We then transformed a few columns:

fleet <- fleet %>%
  mutate(across(where(is.character), str_trim), #Remove all trailing and leading whitespace
         external_marking = str_remove_all(external_marking, c("\\\"|\\\r|\\\n|\\*|/UFA| ?|-?")), #Remove these patterns
         external_marking = str_replace(external_marking, "^([a-zA-Z]+)(0|-)([0-9]+)$", "\\1\\3"), #Further clean external_marking
         vessel_name = str_to_upper(str_replace(vessel_name, "-", " ")), #Capitalize vessel_name
         vessel_name = str_replace(vessel_name, "  ", " "), #Remove double spaces
         event_start_date = as.Date(event_start_date, origin = "1899-12-30"), #Make dates actual dates
         event_end_date = as.Date(ifelse(event_end_date == "2100-12-31", "2021-04-19", event_end_date), origin = "1899-12-30"), #Replace last records by download date and make dates actual dates
         length = as.numeric(length)) %>% #Convert as numeric
  distinct()

We then added a gear based on gear_code:

fleet <- fleet %>%
  left_join(read.xlsx("https://www.dropbox.com/s/57dqlccmu1i8r99/MDR_Gear_Type.xlsx?dl=1") %>% #Downloaded on the European Commission's CIRCABC platform
              select(gear_code = Code,
                     gear = EnDescription,
                     gear_cat = SubCategory) %>%
              #Cleaning gear and gear_cat
              mutate(gear = str_to_sentence(str_remove(gear, "- ")),
                     gear = ifelse(grepl("know", ignore.case = TRUE, gear), "Unknown gear", gear),
                     gear_cat = ifelse(grepl("mid", ignore.case = TRUE, gear_cat), "Pelagic trawls & seines",
                                       ifelse(grepl("bottom", ignore.case = TRUE, gear_cat), "Bottom trawls & dredges",
                                              ifelse(grepl("surround", ignore.case = TRUE, gear), "Pelagic trawls & seines", 
                                                     ifelse(grepl("gill|trammel", ignore.case = TRUE, gear), "Entangling nets", 
                                                            ifelse(grepl("long", ignore.case = TRUE, gear), "Longlines", 
                                                                   ifelse(grepl("line", ignore.case = TRUE, gear), "Hook & lines", 
                                                                          ifelse(grepl("hand|beach", ignore.case = TRUE, gear), "Other gears",  
                                                                                 ifelse(grepl("dredge", ignore.case = TRUE, gear), "Bottom trawls & dredges",  
                                                                                        ifelse(grepl("bottom|danish|scottish", ignore.case = TRUE, gear), "Bottom trawls & dredges",  
                                                                                               ifelse(grepl("trawl", ignore.case = TRUE, gear), "Undet. trawls",  
                                                                                                      ifelse(grepl("pot|trap|pound|fyke|weir", ignore.case = TRUE, gear), "Pots & traps",  
                                                                                                             ifelse(grepl("purse|seine", ignore.case = TRUE, gear) & !grepl("PS", gear_code), "Pelagic trawls & seines",  
                                                                                                                    ifelse(grepl("PS", ignore.case = TRUE, gear_code), "Purse seines",  
                                                                                                                           ifelse(grepl("unknown", ignore.case = TRUE, gear), "Undet.", "Other gears"))))))))))))))) %>%
              #Adding missing gears
              add_row(gear_code = c("", "FDV", "GES", "HMS", "LVS", "NS", "SDV", "OTS", "000"), 
                      gear = c("Unknown gear", "Free diving", "Undet. nets", "Undet. dredges", "Set vertical lines", "Unknown gear", "Undet. bottom seines", "Undet. twin trawls", "Unknown gear"), 
                      gear_cat = c("Undet.", "Other gears", "Entangling nets ", "Bottom trawls & dredges", "Hook & lines", "Undet.", "Bottom trawls & dredges", "Undet. trawls", "Undet.")),
            by = "gear_code") %>%
  select(-gear_code)

Finally, we simplified the records:

fleet <- setDT(fleet)
fleet <- fleet[,.(event_start_date = min(event_start_date),
                  event_end_date = max(event_end_date)) ,
               by = .(rleid(country, cfr, external_marking, vessel_name, gear, gear_cat, length, power),
                      country, 
                      cfr,
                      external_marking,
                      vessel_name,
                      gear,
                      gear_cat,
                      length, power)] %>%
  select(-rleid) %>%
  filter(!event_end_date < "2014-01-01")

1.2 The European Fisheries & Maritime Fund (EMFF)

The EMFF list of beneficiaries was downloaded from the Netherlands Enterprise Agency’s (RVO) website (https://www.rvo.nl/onderwerpen/agrarisch-ondernemen/visserij-en-aquacultuur/europees-fonds-voor-maritieme-zaken-en-visserij-efmzv/openbaarmaking-efmzv-subsidies) and loaded:

emff <- read.xlsx("https://www.dropbox.com/s/ad6vbab7zqgkhck/T%C3%A9l%C3%A9charg%C3%A9%20le%2010-11-2021-Openbaarmaking_EFMZV_oktober_2021.xlsx?dl=1")

We then selected and renamed the columns of interest:

emff <- emff %>% 
  select(beneficiary = Naam.van.de.begunstigde,
         cfr = Community.Fleet.Registry.identificatienummer,
         project_name = Naam.van.de.concrete.actie,
         project_description = Samenvatting.van.de.concrete.actie,
         project_start = Begindatum.van.de.concrete.actie,
         project_end = Einddatum.van.de.concrete.actie,
         payment_date = `Datum.subsidie-vaststellingen`,
         subsidy_total = Totale.subsidiabele.uitgaven,
         subsidy_eu = Bedrag.van.de.bijdrage.van.de.Unie,
         zip_code = Postcode.van.de.concrete.actie,
         eu_priority = Vermelding.van.de.betrokken.Unieprioriteit)

We then modified a few columns:

emff <- emff %>%
  mutate(across(where(is.character), str_trim), #Remove all trailing and leading whitespace
         across(contains(c("start", "end", "date")), ~as.Date(as.character(.), format = "%Y%m%d")),
         eu_priority = case_when(eu_priority == "UP1" ~ "Fisheries",
                                 eu_priority == "UP2" ~ "Aquaculture",
                                 eu_priority == "UP3" ~ "Common Fisheries Policy",
                                 eu_priority == "UP4" ~ "Community-led local development strategies",
                                 eu_priority == "UP5" ~ "Marketing and processing",
                                 eu_priority == "UP6" ~ "Integrated Maritime Policy"))

We set aside all records pertaining to COVID-19:

emff_covid <- emff %>% 
  filter_all(any_vars(grepl("stilliggen", ., ignore.case = TRUE) & grepl("covid", ., ignore.case = TRUE))) # 'Stilliggen' is Dutch for 'cessation'

At that stage, 269 rows out of the 502 rows of the EMFF list of beneficiaries — i.e. 53.6 % — were set aside and corresponded to COVID temporary cessation payments. In value, this 269 accounted for 6,221,600 EUR, i.e. 4.4 % of the entire EMFF allocated, and 13.6 % of Priority #1.

1.3 Matching records

We then matched EMFF records with the Register:

emff_covid <- emff_covid %>% 
  mutate (id = 1:n()) %>%
  left_join(fleet,
            by = "cfr") %>%
  rowwise() %>%
  mutate(ndays = pmax(pmin(project_end, event_end_date) - pmax(project_start, event_start_date) + 1,0)) %>% #Calculate interval overlap and set to 0 if no overlap
  with_groups(id, filter, ndays == max(ndays)) %>% #Keep most overlapping records
  distinct() 
  
# Case where there is no overlapping periods between our dataset and the fleet register 

if (emff_covid %>% filter (ndays == 0) %>% nrow () > 0) { 
  
emff_covid <- emff_covid %>% 
  filter (ndays > 0) %>%
  bind_rows(emff_covid %>%
              filter(ndays == 0) %>% 
              mutate (ndays = abs(pmin(project_end, event_end_date) - pmax(project_start, event_start_date) + 1)) %>%
              with_groups(id, filter, ndays == min(ndays)))
}

# Case where there is two or more exact same overlapping for a given CFR, e.g., one record of our dataset corresponding to one CFR has the same number of overlapping days with two or more records in the fleet register. This is a problem because it duplicates the record of our dataset. 

if (emff_covid %>% with_groups(id, mutate, count = n()) %>% filter (count > 1) %>% nrow () > 0) {

  emff_covid <- emff_covid %>% 
    with_groups(id, mutate, count = n()) %>% 
    filter (count == 1) %>% 
    bind_rows(emff_covid %>% 
    with_groups(id, mutate, count = n()) %>% 
    filter (count > 1) %>% 
    with_groups(id, slice, 1))
}

emff_covid <- emff_covid %>%
  select (-c("event_start_date", "event_end_date", "ndays", "count", "id"))

We remove from the list of subsidized vessels, the two vessels HK86-MARKERWAARD (CFR : NLD198701037) and WR226- JACK CORNELIS (CFR : NLD199001078) because for unknown reasons they share the same MMSI (244820038).

emff_covid <- emff_covid %>%
  filter(!external_marking %in% c("WR226", "HK86"))

Following the ducth regultation n° WJZ/20087172 (https://zoek.officielebekendmakingen.nl/stcrt-2020-25324.html) giving the amount of COVID-19 temporary cessation subsidies that a vessel can perceived given its characteristics, we can calculate the number of weeks subsidized for each vessel based on the power of their main engine and the total amount of subsidy perceived.

emff_covid <- emff_covid %>%
  mutate (power = as.numeric(power), 
          week_subsidy = ifelse(power*1.34102209 < 260, subsidy_total/2200, # 1.34102209 is the conversion factor from kW to cv
          ifelse(power*1.34102209>260 & power*1.34102209<300, subsidy_total/4400, 
                 ifelse(power*1.34102209>300, subsidy_total/8800, NA))))

We then plot the distribution of TC subsidies between vessel size class and gear

1.3.0.0.0.0.0.0.0.1

Ajouter une étiquette pour indiquer combien de navires sont concernés dans chaque catégorie #########

 ggplot(emff_covid %>% 
  mutate(class_length = ifelse(length < 12, "<12 m", 
                               ifelse(length >= 12 & length < 25, "12-25 m", #Official FranceAgriMer classification
                                      ifelse(length >= 25 & length < 40, "25-40 m", ">40 m")))) %>%
    mutate(gear = ifelse(gear %in% c("Scottish seines", "Danish seines", "Pair seines"), "Demersal seine",
                         ifelse(gear %in% c("Single boat bottom otter trawls", "Twin bottom otter trawls"), "Otter trawl",
                                ifelse(gear == "Beam trawls", "Beam trawl",
                                       ifelse(gear == "Pots", "Pot",
                                              ifelse(gear == "Set gillnets (anchored)", "Gillnets", gear)))))) %>%
  group_by(class_length, gear) %>%
  summarise(subsidy = sum(subsidy_total), subsidy = subsidy/10^6) %>%
  ungroup() %>%
  add_row (class_length = "<12 m", gear = "Beam trawl", subsidy = 0) %>% # we add a row for the <12 m size class, since it did not received any subsidies. 
  mutate(class_length = factor (class_length, levels = c("<12 m", "12-25 m", "25-40 m", ">40 m"))), aes(x=class_length, y=subsidy, fill = gear)) +
  geom_col (color = "grey0") +
  labs (x="Vessel length class", y ="Subsidies received for temporary cessation (million EUR)", fill = "Fishing gear", caption = "This plot includes all vessels that received subsidies for temporary\ncessation, i.e. those that landed in PEFA and those that did not.") + 
  theme_bw () %+% 
  theme(plot.caption= element_text(hjust = 0)) +
  scale_fill_viridis_d () 

ggsave(last_plot(), file = "Output/Figures/Subsidies received for temporary cessation.png", width = 30, height = 15, unit = "cm")

2 Results

2.1 Culprit vessels

Following the ducth regultation n° WJZ/20087172 (https://zoek.officielebekendmakingen.nl/stcrt-2020-25324.html) about the COVID-19 temporary cessation subsidies, subsidized vessels have to :

  1. Stop their fishing activity during 7 consecutive days per subsidized week, from 12:00 a.m. on the first day to 11:59 p.m. on the seventh day.

  2. Switch on their tracking system (AIS) during the whole temporary cessation period.

Vessels can be subsidized for up to 5 weeks, meaning they have to stop their fishing activity for 5 x 7 consecutive days and prove they stayed at the port thanks to their tracking system.

2.1.1 The global fishing watch data

To verify that the subsidized vessels have respected these two conditions, we manually extracted on global fishing watch the fishing days as well as the days when the AIS was switched off.

# Let's load the GFW data

gfw_data <- read.xlsx("Data/Processed/GFW_data.xlsx") %>% 
    mutate_at(vars(c("project_start", "project_end", "fishing_start_gfw", "fishing_end_gfw", "ais_off_begin_gfw", "ais_off_end_gfw")), ~as.Date(., format = "%d/%m/%Y", origin = "1899-12-30")) %>%
  select (-data_acquisition, -access, -cfr, -mmsi, -vessel_name, -last_check) %>% 
  mutate(fishing_period = interval(fishing_start_gfw, fishing_end_gfw)) %>%
  mutate(ais_off_period = interval(ais_off_begin_gfw, ais_off_end_gfw)) %>%
  select (-c("fishing_start_gfw", "fishing_end_gfw", "ais_off_begin_gfw", "ais_off_end_gfw")) %>% 
  pivot_longer(cols = c("fishing_period", "ais_off_period"), names_to = "action", values_to = "time_period") %>% 
  arrange(external_marking, time_period) %>% 
  filter(!is.na(time_period))

vessel_not_found <- read.xlsx("Data/Processed/GFW_data.xlsx") %>%
  filter (grepl("Not found",access)) %>%
  select (external_marking)

Then, we want to know which vessel switched off its AIS at least once during the temporary cessation period.

emff_covid <- emff_covid %>%
  left_join(gfw_data %>%
  filter(action == "ais_off_period") %>%
  select (external_marking) %>% 
  distinct() %>%
  mutate (culprit_ais_off = "TRUE"), by = "external_marking") %>%
  mutate (culprit_ais_off = ifelse(is.na(culprit_ais_off) & !external_marking %in% c(vessel_not_found %>% pull ()), "FALSE", culprit_ais_off))

Among the 267 vessels that received subsidies, 209 switched off at least once their AIS during the temporary cessation period, and 50 did not switch off their AIS. The remaining 8 vessels were not found in GFW.

The following list indicates the name of the 8 vessels that received TC subsidies but that we could not find in GFW.

table(emff_covid %>% 
        filter (is.na(culprit_ais_off)) %>% 
        select(external_marking, cfr, vessel_name), "List of vessels that received TC subsidies but that we could not find in GFW")
List of vessels that received TC subsidies but that we could not find in GFW
external_marking cfr vessel_name
IJM26 NLD198901154 NORD VISTA
UK146 NLD197900998 ALBERT
WR130 NLD199301827 JOHANNA II
ZK2 NLD199501910 POSEIDON
TH16 NLD198302024 HARDER
UK124 NLD201901165 LUUT SENIOR
HK85 NLD198300593 IJSSELMEER
WR117 NLD192901845 JOMAR

We remove those vessels from the following analyses.

emff_covid <- emff_covid %>%
  filter (!is.na(culprit_ais_off))

In addition, we remove from the following analyses 5 vessels whose length is between 12-15 m, because according to the European Regulation 1224/2009 (https://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2009:343:0001:0050:fr:PDF), they don’t have to own an AIS system.

emff_covid <- emff_covid %>%
  filter (length >= 15)

Hence the following analyses focus on the 254 subsidized vessels that were identified on GFW and whose length is higher than 15 m.

We then calculate the fraction of the temporary cessation period during which vessels switched off their AIS.

emff_covid <- emff_covid %>%
  left_join(gfw_data %>%
  filter(action == "ais_off_period") %>%
  mutate(ais_off_days = as.numeric(as.Date(int_end(time_period)) - as.Date(int_start(time_period))) + 1) %>% # we add one to get the two extremities of the time interval
  group_by(external_marking, project_start, project_end) %>%
  summarise (ais_off_days = sum(ais_off_days)) %>%
  ungroup () %>%
  mutate (tc_days = as.numeric(project_end - project_start) + 1,
          ais_off_perc = round(ais_off_days * 100 / tc_days,1)) %>% 
    select(external_marking, ais_off_perc), by = "external_marking") %>%
    mutate(ais_off_perc = ifelse(is.na(ais_off_perc) & !external_marking %in% c(vessel_not_found %>% pull ()), 0, ais_off_perc))

We then determine if the subsidized vessels stopped their fishing activity during 7 consecutive days per subsidized week. Since we focus on the number of days spent without fishing and with the AIS on instead of the number of days at the port, this method is conservative. Indeed, we consider a days spent at sea without fishing the same as if the vessel remained docked, whereas the ducth regultation n° WJZ/20087172 indicates that the subsidized vessel have to prove it remain docked.

The following analysis aims to look for vessels that can prove they stopped their fishing activity during 7 consecutive days per subsidized week, although their AIS was switched off intermittently.

# cessation_begin contains the number of days for the first full period spent without fishing and with the AIS switched on 

cessation_begin <- gfw_data %>% 
  group_by(external_marking) %>% 
  slice(1) %>% 
  ungroup () %>% 
  mutate(cessation_days = as.numeric(as.Date(int_start(time_period)) - project_start)) %>% 
  select(external_marking, cessation_days)

# cessation_end contains the number of days for the last full period spent without fishing and with the AIS switched on 

cessation_end <- gfw_data %>% 
  arrange(external_marking, desc(time_period)) %>% 
  group_by(external_marking) %>% 
  slice(1) %>% 
  ungroup () %>% 
  mutate(cessation_days = as.numeric(project_end - as.Date(int_end(time_period)))) %>%
  select(external_marking, cessation_days)

# cessation_weeks contains the number of full weeks (i.e. 7 consecutive days) spent without fishing and with the AIS on.

cessation_weeks <- gfw_data %>% 
  mutate (cessation_days = as.numeric(as.Date(int_start(lead(time_period))) - as.Date(int_end(time_period)))-1) %>% # we calculate between each successive period, the number of days spent without fishing and with the AIS on
  group_by(external_marking) %>% 
  slice(-n()) %>% # we remove the last row because because there is n-1 periods of time between n successive time intervals
  ungroup () %>% 
  select(external_marking, cessation_days) %>% 
  bind_rows (cessation_begin) %>% # we add the number of days of the first full period spent without fishing and with the AIS switched on
  bind_rows (cessation_end) %>% # we add the number of days of the last full period spent without fishing and with the AIS switched on 
  arrange(external_marking) %>%
  mutate(cessation_weeks = floor(cessation_days/7)) %>% # we convert days into weeks. As we are only interest by full weeks (i.e., 7 consecutive days), we round to the lower integer. 
  group_by(external_marking) %>%
  summarise(cessation_weeks = sum(cessation_weeks)) %>% # we calculate the sum of weeks spent without fishing and with the AIS on
  ungroup ()

# we create a new column (culprit_seven_days_gfw) in emff_covid that indicates if vessels can prove thanks to their AIS if they have stopped their fishing activity during 7 consecutive days per subsidized week. 

emff_covid <- emff_covid %>%
  left_join(cessation_weeks, by = "external_marking") %>%
  mutate (culprit_7days_gfw = ifelse(cessation_weeks >= week_subsidy, "FALSE", "UNKNOWN")) %>%
  select(-cessation_weeks)

rm(cessation_begin, cessation_end, cessation_weeks, vessel_not_found)

Based on GFW data, we identified 43 vessels which stopped their fishing activity during 7 consecutive days per subsidized week. Among those vessels 30 switched off their AIS intermittently, while 13 vessels had their AIS switched on during the whole temporary cessation period.

Then, we focus on the number of days between each fishing period (while in the previous analysis we focused on the number of days without fishing AND with the AIS on).

Even if the AIS record is incomplete, if the number of full weeks between each fishing period is lower than the number of week subsidized, it means that the vessel did not respect the TC rule, since even in the hypothetical case where an AIS off means the vessel is docked, there is not enough full weeks between the fishing periods to exonerate the vessel.

# This chunk is similar to the previous one. The difference is that we filter gfw_data to focus only on full weeks between fishing periods (we don't take into account the AIS off periods)

# cessation_begin contains the number of days for the first full period spent without fishing 

cessation_begin <- gfw_data %>% 
  filter (action == "fishing_period") %>%
  group_by(external_marking) %>% 
  slice(1) %>% 
  ungroup () %>% 
  mutate(cessation_days = as.numeric(as.Date(int_start(time_period)) - project_start)) %>% 
  select(external_marking, cessation_days)

# cessation_end contains the number of days for the last full period spent without fishing 

cessation_end <- gfw_data %>% 
  filter (action == "fishing_period") %>%
  arrange(external_marking, desc(time_period)) %>% 
  group_by(external_marking) %>% 
  slice(1) %>% 
  ungroup () %>% 
  mutate(cessation_days = as.numeric(project_end - as.Date(int_end(time_period)))) %>%
  select(external_marking, cessation_days)

# cessation_weeks contains the number of full weeks (i.e. 7 consecutive days) spent without fishing 

cessation_weeks <- gfw_data %>% 
  filter (action == "fishing_period") %>%
  mutate (cessation_days = as.numeric(as.Date(int_start(lead(time_period))) - as.Date(int_end(time_period)))-1) %>% # we calculate between each successive period, the number of days spent without fishing 
  group_by(external_marking) %>% 
  slice(-n()) %>% # we remove the last row because because there is n-1 periods of time between n successive time intervals
  ungroup () %>% 
  select(external_marking, cessation_days) %>% 
  bind_rows (cessation_begin) %>% # we add the number of days of the first full period spent without fishing 
  bind_rows (cessation_end) %>% # we add the number of days of the last full period spent without fishing 
  arrange(external_marking) %>%
  mutate(cessation_weeks = floor(cessation_days/7)) %>% # we convert days into weeks. As we are only interest by full weeks (i.e., 7 consecutive days), we round to the lower integer. 
  group_by(external_marking) %>%
  summarise(cessation_weeks = sum(cessation_weeks)) %>% # we calculate the sum of weeks spent without fishing 
  ungroup ()

# we add the TRUE category to culprit_7days_gfw which contains the vessels we identified as culprit 

emff_covid <- emff_covid %>%
  left_join(cessation_weeks, by = "external_marking") %>%
  mutate (culprit_7days_gfw = ifelse(cessation_weeks < week_subsidy & !is.na(cessation_weeks), "TRUE", culprit_7days_gfw)) %>% 
  select(-cessation_weeks)

rm(cessation_begin, cessation_end, cessation_weeks)

Based on GFW data, we identified, 117 vessels which did not stop their fishing activity during 7 consecutive days per subsidized week. Among those vessels 81 switched off their AIS intermittently, while 36 vessels had their AIS switched on during the whole temporary cessation period.

2.1.2 The fish auction data (PEFA)

Data aggregated daily from the PEFA fish auctions website were loaded:

pefa <- read.xlsx("Data/Raw/data_pefa.xlsx", sheet = "TOTAL")

We then renamed the columns of interest:

pefa <- pefa %>% 
  select(date = Date,
         external_marking = Navire,
         vessel_name = Nom.du.navire,
         fishing_zone = Zone.de.pêche,
         fishing_days = Nombres.de.jours.en.mer,
         pefa_gear = Méthode.de.pêche,
         landings = Poids.total.de.poissons.débarqués)

And transformed a few columns:

pefa <- pefa %>% 
  mutate(across(where(is.character), str_trim)) %>% #Remove all trailing and leading whitespace
  mutate(external_marking = str_remove_all(external_marking, c("\\\"|\\\r|\\\n|\\*|/UFA| ?|-?")), #Remove these patterns
         external_marking = str_replace(external_marking, "^([a-zA-Z]+)(0|-)([0-9]+)$", "\\1\\3"), #Further clean external_marking
         vessel_name = str_to_upper(str_replace(vessel_name, "-", " ")),
         vessel_name = str_remove_all(vessel_name, c("MP ")), #Remove these patterns
         date = as.Date(date, origin = "1899-12-30"),
         landings = as.numeric(gsub("[^0-9]", "", landings))) %>%
  filter(date > "2020-05-01") %>%
  with_groups(c(external_marking, vessel_name, date, pefa_gear, fishing_days), summarise, landings = sum(landings)) %>%
  filter(landings > 0)

We then joined EMFF beneficiaries for COVID-19 temporary cessation with PEFA data and cleaned vessel_name :

# we want to add the fishing gear filled out in PEFA. 
pefa_gear <- emff_covid %>%
  left_join(pefa %>%
              mutate(match = "OK"),
            by = "external_marking") %>% 
  filter(!is.na(match) & date %within% interval(project_start, project_end)) %>%
  group_by(external_marking, pefa_gear) %>% 
  summarise(count =n()) %>% 
  ungroup() %>% 
  group_by(external_marking) %>% 
  filter (count == max(count)) %>% # if a given vessel has used different fishing gear during the TC period, we keep only the gear that was used the most
  slice(1) %>% 
  ungroup () %>%
select (-count)


emff_covid_pefa <- emff_covid %>%
  left_join(pefa %>%
              mutate(match = "OK"),
            by = "external_marking") %>%
  filter(!is.na(match) & date %within% interval(project_start, project_end)) %>% #Keep in-scope records
  select(-c("match", "pefa_gear")) %>%
  left_join(pefa_gear, by="external_marking") %>%
  mutate(comment = ifelse(vessel_name.x == vessel_name.y, "Same name", NA),
         comment = ifelse(is.na(comment) & stringdist(vessel_name.x, vessel_name.y) <= 6, "Spelling mistake", comment),
         source = case_when(external_marking == "ARM44" ~ "ttps://www.shipdata.nl/index.php?mode=shipthumb&Schip=10",
                            external_marking == "ARM7" ~ "https://www.shipdata.nl/index.php?mode=shipthumb&Schip=2",
                            external_marking == "LO28" ~ "https://www.shipdata.nl/index.php?mode=shipthumb&Schip=15822",
                            external_marking == "ST4" ~ "NL vessel from EMFF = https://www.shipdata.nl/index.php?mode=shipthumb&Schip=17268",
                            external_marking == "TS2" ~ "NL vessel from EMFF = https://www.shipdata.nl/index.php?mode=shipthumb&Schip=15791",
                            external_marking == "TX1" ~ "https://www.shipdata.nl/index.php?mode=shipthumb&Schip=12232",
                            external_marking == "TX21" ~ "https://www.shipdata.nl/index.php?mode=shipthumb&Schip=17645",
                            external_marking == "TX3" ~ "https://zoeken-mijn.s-bb.nl/Home/Details?leerbedrijfId=100373808",
                            external_marking == "WR18" ~ "https://www.shipdata.nl/index.php?mode=shipthumb&Schip=521",
                            external_marking == "WR22" ~ "https://www.shipdata.nl/index.php?mode=shipthumb&Schip=15783",
                            external_marking == "WR23" ~ "https://www.shipdata.nl/index.php?mode=shipthumb&Schip=10946",
                            external_marking == "UK171" ~ "https://www.shipdata.nl/index.php?mode=shipthumb&Schip=18821",
                            external_marking == "TX33" ~ "Old vessel name = https://www.shipdata.nl/index.php?mode=shipthumb&Schip=12696",
                            external_marking == "UK225" ~ "Old vessel name = https://www.shipdata.nl/index.php?mode=shipthumb&Schip=87",
                            external_marking == "HD32" ~ "https://www.shipdata.nl/index.php?mode=shipthumb&Schip=18307"),
         comment = ifelse(grepl("[a-zA-Z]+", source) & !grepl("NL vessel", source) & !grepl("Old vessel name", source), "Matching owner", 
                          ifelse(grepl("NL vessel", source), "Incorrect match", 
                                 ifelse(grepl("Old vessel name", source), "Matching old vessel name", comment))),
         source = ifelse(comment %in% c("Same name", "Spelling mistake"), "-", source)) %>%
  rename(vessel_name = vessel_name.x) %>%
  select(-vessel_name.y, - culprit_ais_off, -ais_off_perc, -culprit_7days_gfw) %>%
  filter(!(is.na(comment) | comment == "Incorrect match")) %>%
  group_by(external_marking, date) %>% # for 6 external_marking/date combinations, we have duplicated lines because there are different numbers of fishing days. In these cases, we calculate the sum of landings, and keep only the maximum number of days spent at sea.
  mutate(landings = sum(landings),
         fishing_days = max(fishing_days)) %>%
  ungroup () %>%
  distinct ()

rm(pefa_gear)

At this step, 88 out of the 254 vessels that received subsidies for temporary cessation landed at least once in PEFA.

For these vessels, we estimate the number of full weeks (i.e. 7 consecutive days) spent without fishing based on the landing dates and the number of fishing days filled out in PEFA, for the whole temporary cessation period. It allows to determine if the vessels that landed in PEFA effectively stayed at the port during the number of weeks they were subsidized. Compare to GFW data, this is a complementary approach based on independent data to determine if subsidized vessels have respected the TC rules.

# cessation_begin contains the number of days spent without fishing between the beginning of the project and the first fishing period 

cessation_begin <- emff_covid_pefa %>% 
  arrange(external_marking,date) %>%
  group_by(external_marking) %>%
  slice(1) %>% # we select the first landing date for each vessel
  ungroup () %>%
  mutate(fishing_start = date - fishing_days) %>% # we take into account the number of days at sea before the first landing date to determine when fishing began. 
  mutate(cessation_days = fishing_start - project_start) %>%
  mutate(cessation_days = ifelse(cessation_days < 0, 0, cessation_days)) %>% # sometimes vessels were fishing at the starting date of the project, hence cessation_days is negative and we consider that the number of days without fishing is equal to zero.  
  select(external_marking, cessation_days)
  

# cessation_end contains the number of days spent without fishing between the end of the project and the last fishing period 

cessation_end <- emff_covid_pefa %>% 
  arrange(external_marking, desc(date)) %>% # we select the last landing date for each vessel 
  group_by(external_marking) %>%
  slice(1) %>%
  ungroup () %>%
  mutate(cessation_days = as.numeric(project_end - date + 1)) %>% # we calculate the number of days without fishing between the last fishing period and and the end of the project. We add 1 to take into account the ending day of the TC period.
  select(external_marking, cessation_days)

# culprits_real contains the list of the culprit vessels based on this semi-conservative method that take into account the number of days during which vessel were fishing

emff_covid <- emff_covid %>%
  left_join(emff_covid_pefa %>% 
              select(external_marking, date, fishing_days) %>% 
              arrange(external_marking, date) %>% 
              mutate(fishing_period = interval(date - fishing_days, date - 1)) %>% # fishing period corresponds to the interval of time during which vessels were fishing during temporary cessation. We consider the landing day not to be a fishing day. 
              mutate (cessation_days = as.numeric(as.Date(int_start(lead(fishing_period))) - as.Date(int_end(fishing_period))) - 1) %>% # we calculate between each successive fishing period the number of days spent without fishing. 
              mutate (cessation_days = ifelse(cessation_days <0, 0, cessation_days)) %>% # some fishing periods overlaps, hence the number of days spent without fishing is obviously equal to zero. 
              group_by(external_marking) %>%
              slice(-n()) %>% # we remove the last row because for n fishing periods, there is n-1 period of time without fishing
              ungroup () %>% 
              select(external_marking, cessation_days) %>%
              bind_rows (cessation_begin) %>% # we add the the number of days spent without fishing between the beginning of the project and the first fishing period 
              bind_rows (cessation_end) %>% # we add the number of days spent without fishing between the last fishing period and the end of the project
              arrange(external_marking) %>%
              mutate(cessation_weeks = floor(cessation_days/7)) %>% # we convert days into weeks. As we are only interest by full weeks (i.e., 7 consecutive days), we round to the lower integer. 
              group_by(external_marking) %>% 
              summarise(cessation_weeks = sum(cessation_weeks)) %>% # we calculate the sum of full weeks spent without fishing. 
              ungroup (), by = "external_marking") %>% # we merge these data with the full list of beneficiaries (emff_covid) to compare the number of week subsidized (i.e. hence the number of weeks during which a given vessel have to stay at the port) with the number of weeks effectively spent by the vessel without fishing. 
  mutate (culprit_7days_pefa = ifelse(cessation_weeks < week_subsidy, "TRUE", "UNKNOWN")) %>%# we create a new column indicating if the vessels that landed in PEFA stopped their fishing activity following TC rules. 
  select(-cessation_weeks)

rm(cessation_begin, cessation_end)

Based on PEFA data, we found 28 culprit vessels that did not respect the “no fishing during 7 consecutive days per week subsidized” rule. Among those vessels, 24 additional vessels were identified as culprit (they belonged to the “unknown” group based on GFW data),2 vessels were already identified as culprit based on GFW data, and 2 vessels (UK145 and G023) were identified as culprit based on PEFA data but not culprit based on GFW data (there is a conflict between PEFA and GFW data for these vessels).

Taking into account both GFW and PEFA data, we determine if a vessel respected the “no fishing during 7 consecutive days per week subsidized” rule. We create three categories : the vessels that did not respect the rule, the vessels that did respect the rule, and the vessels for which we don’t know based on our data.

culprit <- emff_covid %>% 
  filter ((culprit_ais_off == "TRUE" & culprit_7days_gfw == "UNKNOWN" & culprit_7days_pefa == "TRUE") | 
          (culprit_ais_off == "TRUE" & culprit_7days_gfw == "TRUE" & culprit_7days_pefa == "UNKNOWN") |
          (culprit_ais_off == "TRUE" & culprit_7days_gfw == "TRUE" & is.na(culprit_7days_pefa)) |
          (culprit_ais_off == "FALSE" & culprit_7days_gfw == "TRUE" & is.na(culprit_7days_pefa)) |
          (culprit_ais_off == "FALSE" & culprit_7days_gfw == "TRUE" & culprit_7days_pefa == "UNKNOWN") |
          (culprit_ais_off == "TRUE" & culprit_7days_gfw == "TRUE" & culprit_7days_pefa == "TRUE")) %>% 
  select (external_marking) 
not_culprit <- emff_covid %>% 
  filter ((culprit_ais_off == "TRUE" & culprit_7days_gfw == "FALSE" & is.na(culprit_7days_pefa)) | 
          (culprit_ais_off == "FALSE" & culprit_7days_gfw == "FALSE" & culprit_7days_pefa == "UNKNOWN") |
          (culprit_ais_off == "FALSE" & culprit_7days_gfw == "FALSE" & is.na(culprit_7days_pefa)) |
          (culprit_ais_off == "TRUE" & culprit_7days_gfw == "FALSE" & culprit_7days_pefa == "UNKNOWN")) %>% 
  select (external_marking) 
we_dont_know <- emff_covid %>% 
  filter ((culprit_ais_off == "TRUE" & culprit_7days_gfw == "UNKNOWN" & culprit_7days_pefa == "UNKNOWN") | 
          (is.na(culprit_ais_off) & is.na(culprit_7days_gfw) & is.na(culprit_7days_pefa)) |
          (culprit_ais_off == "TRUE" & culprit_7days_gfw == "UNKNOWN" & is.na(culprit_7days_pefa)) |
          (culprit_ais_off == "TRUE" & culprit_7days_gfw == "FALSE" & culprit_7days_pefa == "TRUE") | # conflict between PEFA and GFW data
          (is.na(culprit_ais_off) & is.na(culprit_7days_gfw) & culprit_7days_pefa == "UNKNOWN")) %>% 
  select (external_marking) 

We create a new column indicating whether the vessels have respected the “no fishing during 7 consecutive days per week subsidized” rule based on the GFW and PEFA dataset.

emff_covid <- emff_covid %>%
  left_join(culprit %>%
              mutate(culprit_7days_gfw_pefa = "TRUE") %>%
              bind_rows(not_culprit %>%
              mutate(culprit_7days_gfw_pefa = "FALSE")) %>%
              bind_rows(we_dont_know %>%
              mutate(culprit_7days_gfw_pefa = "UNKNOWN")), by = "external_marking")

rm(culprit, not_culprit, we_dont_know)

2.1.3 Summary of the results

Out of the 254 subsidized and identified vessels, only 13 vessels have remained within the framework of the law by having respected i) the obligation to keep the AIS on over the entire period covered by the temporary shutdowns and ii) to stop any fishing activities during 7 consecutive days per week subsidized. These vessels received 242,000 euros out of the 5,975,200 euros allocated to temporary cessations. 36 vessels respected the obligation to keep the AIS on but did not stop their fishing activities during 7 consecutive days per week subsidized.

205 vessels switched at least once their AIS. Among them, 28 stopped their fishing activities during 7 consecutive days per week subsidized. 105 did not stop their fishing activities during 7 consecutive days per week subsidized. This was highlighted thanks to GFW and/or PEFA data. And for 72 vessels, we cannot conclude whether they stopped their fishing activities or not.

The following table shows the 13 vessels that have remained within the framework of the law by having respected i) the obligation to keep the AIS on over the entire period covered by the temporary shutdowns and ii) to stop any fishing activities during 7 consecutive days per week subsidized.

Vessels that remained within the framework of the law
External marking Vessel name CFR Number of weeks subsidized Amount of subsidy (EUR) Fishing gear Length (m) Fraction of time spent with AIS off
TX42 RES NOVA NLD200302687 5 11000 Beam trawls 19.99 0
UK135 SJOERD HENDRIKJE NLD201901174 2 17600 Single boat bottom otter trawls 24.98 0
UK149 STELLA MARIS NLD199301848 2 17600 Beam trawls 42.00 0
UK156 POOLSTER NLD195500619 5 22000 Beam trawls 22.99 0
UQ6 DINA NLD199301897 5 11000 Beam trawls 18.44 0
WON77 WIETSKE NLD196100590 4 8800 Beam trawls 19.12 0
WR213 TINI SIMONE NLD199201667 5 22000 Beam trawls 22.72 0
WR222 ANNA TATJANA NLD195800747 5 22000 Beam trawls 23.86 0
WR27 VISAREND BEL001191970 5 22000 Beam trawls 22.55 0
ZK12 PIETER DION NLD196900552 5 22000 Beam trawls 21.54 0
ZK43 BORNRIF NLD200202652 5 22000 Beam trawls 21.77 0
ZK8 HUNSINGO NLD195900443 5 22000 Beam trawls 19.75 0
ZK80 LINQUENDA NLD196200324 5 22000 Beam trawls 24.89 0

The following table shows the 36 vessels that have respected the obligation to keep the AIS on but did not stop their fishing activities during 7 consecutive days per week subsidized.

Vessels that have respected the obligation to keep the AIS on but did not stop their fishing activities during 7 consecutive days per week subsidized
External marking Vessel name CFR Number of weeks subsidized Amount of subsidy (EUR) Fishing gear Length (m) Fraction of time spent with AIS off
ARM46 CORNELIA ADRIANA NLD198600295 4 17600 Beam trawls 25.00 0
HA13 NIJSSIEN NLD200602002 5 22000 Beam trawls 21.98 0
KG18 LADEBOMADO NLD194900766 5 22000 Beam trawls 19.00 0
LO5 EELTJE JAN NLD192700221 5 11000 Beam trawls 18.76 0
ST25 ELLY MARIJE NLD198700337 5 22000 Beam trawls 19.81 0
TS6 ARYANNE NLD198800356 5 22000 Beam trawls 18.99 0
TS9 TRIX NLD195800368 5 11000 Beam trawls 19.00 0
TX21 PIETER VAN ARIS NLD200302661 5 22000 Beam trawls 19.96 0
TX27 NOVA CURA NLD200102639 4 17600 Beam trawls 22.74 0
TX65 BONA FIDE NLD201871991 3 13200 Beam trawls 23.86 0
UK155 FRIENDSHIP NLD198801104 5 22000 Set gillnets (anchored) 20.95 0
UK162 GERRIT SENIOR NLD195100539 5 22000 Beam trawls 23.12 0
UK168 KEES KORF NLD196300615 5 22000 Beam trawls 24.60 0
UK179 ONDERNEMING NLD196500428 5 22000 Beam trawls 25.20 0
UK225 AUKE SENIOR NLD201901148 4 35200 Single boat bottom otter trawls 30.15 0
UK271 ESTER JACOBA BEL035541964 5 22000 Beam trawls 22.25 0
UK368 PETRONELLA BEL032071985 5 22000 Beam trawls 23.77 0
UK71 KOBUS POST NLD198200283 5 22000 Beam trawls 21.70 0
UQ15 CAROLINE ELISE NLD200102629 5 22000 Beam trawls 19.99 0
UQ17 MARTHA FREDERIKA NLD198800567 5 22000 Beam trawls 20.25 0
VLI27 JEANET MAARTJE NLD199101723 3 13200 Beam trawls 23.97 0
WL20 PIETER KEES NLD200002604 5 22000 Beam trawls 19.99 0
WL33 WILLEM ANNE DEU200650219 5 22000 Beam trawls 20.25 0
WR12 EMMA NLD201840080 5 22000 Beam trawls 23.99 0
WR122 ANNE NOËLLE NLD196200686 5 22000 Beam trawls 24.66 0
WR14 JOOST NLD194500918 5 22000 Single boat bottom otter trawls 21.41 0
WR181 ELISABETH NLD200002614 5 22000 Beam trawls 23.73 0
WR21 JENTE NLD198200016 5 22000 Beam trawls 23.92 0
WR230 GIDEON NLD196700023 5 22000 Beam trawls 22.50 0
WR291 ESTHER JENKE NLD196300652 5 22000 Beam trawls 21.06 0
WR57 JACOBA NLD198901099 4 17600 Beam trawls 23.85 0
YE63 KIEK UUT NLD198300580 5 22000 Beam trawls 20.55 0
ZK17 JOHANNES DIRK NLD195800596 5 22000 Beam trawls 17.74 0
ZK44 VIER GEBROEDERS NLD200002602 5 22000 Beam trawls 22.50 0
ZK49 TWEE GEBROEDERS NLD196300331 5 22000 Beam trawls 21.06 0
ZK5 KLAAS SR. NLD201772022 4 17600 Beam trawls 19.98 0

The following table shows the 28 vessels that switched off their AIS but were able to prove they have stopped their fishing activities for seven consecutive days per week subsidized.

Vessels that switched off their AIS but were able to prove they have stopped their fishing activities for seven consecutive days per week subsidized
External marking Vessel name CFR Number of weeks subsidized Amount of subsidy (EUR) Fishing gear Length (m) Fraction of time spent with AIS off
ARM20 GEERTRUID ADRIANA NLD200302691 3 26400 Beam trawls 42.37 10.3
ARM7 JAN SENIOR NLD198700003 5 44000 Beam trawls 45.68 21.8
BR10 JOHANNA NLD196700012 5 22000 Beam trawls 18.56 0.9
GO48 CORNELIS SENIOR NLD199201770 3 26400 Beam trawls 40.14 21.2
HD27 ZUIDERHAAKS NLD199201803 2 17600 Beam trawls 41.99 34.6
HD30 FORTUNA NLD200302657 3 13200 Beam trawls 26.64 11.3
HK82 JAN NLD197900574 5 11000 Beam trawls 18.20 21.2
LO20 ZWARTE AREND NLD198700241 5 11000 Beam trawls 19.60 2.5
LO28 MARE FRISICUM DEU401110101 2 8800 Single boat bottom otter trawls 23.98 6.4
LO7 ZWERVER BEL044021963 5 22000 Beam trawls 23.78 6.7
SL42 JAN CORNELIS III NLD199201710 2 17600 Beam trawls 41.99 73.5
SL45 STELLAR NLD200113658 2 17600 Scottish seines 31.67 22.4
TH5 ADRIANA MAATJE NLD198500414 3 13200 Beam trawls 22.97 6.7
UK148 LUNAR NLD199702134 1 8800 Single boat bottom otter trawls 42.36 10.1
UK236 DEO VOLENTE NLD198400288 5 22000 Single boat bottom otter trawls 24.44 38.1
UK242 KLEINE JAN NLD196901896 4 35200 Single boat bottom otter trawls 29.20 5.8
UK258 JACOBA NLD198801013 5 22000 Pots 19.53 62.1
UK64 MATTANJA NLD200302694 2 17600 Beam trawls 39.67 2.5
UK95 AART MAASKANT NLD199301890 4 35200 Beam trawls 42.36 9.3
WL15 MONTE TJERK NLD192400512 5 22000 Beam trawls 20.53 18.6
WR129 JACOB MARCEL NLD196300697 5 22000 Beam trawls 24.30 6.6
WR15 CORNELIS JOHANNES NLD196100679 4 8800 Beam trawls 18.14 13.4
WR67 MAARTJE NLD196800728 5 44000 Twin bottom otter trawls 30.95 15.5
YE6 NOOR CATHARINA DEU401340101 1 4400 Beam trawls 19.96 30.6
ZK20 LAUWERSZEE NLD198400160 5 11000 Beam trawls 18.10 25.0
ZK21 ANNA NLD196200744 5 22000 Beam trawls 21.96 8.5
ZK47 PIETER JOHANNES NLD196100018 5 22000 Beam trawls 20.61 8.1
ZK92 JOSIENA LISA NLD198400589 5 22000 Beam trawls 23.20 3.5

The following table shows the 105 vessels that switched off their AIS and did not stop their fishing activities during 7 consecutive days per week subsidized.

Vessels that switched off their AIS and did not stop their fishing activities during 7 consecutive days per week subsidized
External marking Vessel name CFR Number of weeks subsidized Amount of subsidy (EUR) Fishing gear Length (m) Fraction of time spent with AIS off
ARM18 JORIS SENIOR NLD199201721 5 44000 Beam trawls 45.98 33.0
EH15 GERRIT SENIOR NLD196000230 5 11000 Beam trawls 20.19 30.8
GO20 MARIA NLD198800086 5 44000 Beam trawls 39.45 47.8
GO22 JAN CORNELIS NLD200602662 1 8800 Beam trawls 41.05 25.4
GO26 AREND JAN NLD200202640 3 26400 Beam trawls 42.37 16.9
GO37 EBEN HAËZER NLD200002596 1 8800 Beam trawls 40.72 34.6
GO38 DE VERTROUWEN NLD200202651 5 44000 Beam trawls 42.37 55.1
GO44 QUO VADIS NLD199001042 5 44000 Beam trawls 39.02 34.4
GO5 ORA ET LABORA NLD200302680 5 44000 Beam trawls 42.37 28.3
GO58 JAKORIWI NLD198400140 5 22000 Beam trawls 22.37 29.1
HA4 TINA NLD192800266 4 17600 Beam trawls 23.50 51.5
HA40 SIMONA NLD194700424 5 11000 Beam trawls 21.90 55.6
HA41 ANTJE NLD198900417 5 22000 Beam trawls 20.20 53.4
HA43 DE VROUWE ELISABETH NLD196400449 5 22000 Beam trawls 22.90 1.5
HD36 VOLHARDING DEU401170101 3 26400 Single boat bottom otter trawls 26.47 13.9
HD5 ALBERTINA WILLEMINA NLD195400969 5 22000 Beam trawls 19.55 55.7
HK81 HANNAH NLD198500597 5 22000 Beam trawls 19.45 56.6
KW14 JOLISSA NLD200402702 2 17600 Beam trawls 41.05 44.2
KW145 CATHARINA NLD200602669 5 44000 Beam trawls 41.25 50.0
KW34 ROSEMARIE NLD199702084 4 35200 Beam trawls 42.36 45.5
KW36 MARGRIET NLD200402698 4 35200 Beam trawls 40.72 50.8
KW5 LEENDERT DE MOL NLD200002611 4 17600 Beam trawls 23.97 15.6
KW88 PELIKAAN NLD199802200 5 44000 Beam trawls 42.40 100.0
LO17 LIQUENDA NLD189900729 5 22000 Beam trawls 22.04 14.7
LO8 TRIJNTJE NLD199501939 2 8800 Beam trawls 22.06 7.4
MDV2 METANOIA NLD201801162 4 35200 Single boat bottom otter trawls 30.15 4.2
OD6 ZELDEN RUST NLD198700281 5 44000 Beam trawls 37.99 74.3
OL12 DRIE GEBROEDERS NLD196600694 5 22000 Beam trawls 19.15 42.2
OL5 JACOB SR. BEL000071985 5 22000 Beam trawls 19.10 78.9
SCH10 DRIE GEBROEDERS NLD196800184 5 22000 Beam trawls 22.47 6.0
SL2 ARENTJE NLD196100809 5 22000 Beam trawls 20.80 2.0
SL27 JOHANNES NLD198700088 3 26400 Scottish seines 35.79 37.3
ST20 AUKE SENIOR NLD199001086 5 11000 Beam trawls 21.99 27.0
ST22 PEKE SR. NLD200002578 5 22000 Beam trawls 19.99 22.3
ST24 MARIA JOSEFINA NLD198900701 5 22000 Beam trawls 20.03 4.5
ST27 VANQUISH NLD196600791 5 11000 Beam trawls 20.68 43.8
ST4 HARMEN SENIOR NLD199001095 5 22000 Beam trawls 20.57 12.1
TH6 JOHANNA CORNELIA NLD198100422 5 22000 Beam trawls 23.95 15.2
TS2 SVEN NLD198800457 5 22000 Beam trawls 20.15 47.4
TX14 GRIETJE NLD199201675 3 26400 Beam trawls 40.90 26.1
TX19 ELISABETH CHRISTINA NLD200302695 2 17600 Beam trawls 42.58 40.2
TX29 HELENA ELIZABETH NLD198500146 5 44000 Beam trawls 40.40 34.8
TX33 NOVA SPES BEL040521984 5 22000 Beam trawls 23.90 56.3
TX34 SOLA GRATIA NLD200002617 5 22000 Beam trawls 21.15 9.3
TX94 AVONTUUR NLD199301725 2 17600 Beam trawls 40.00 28.6
UK1 ALBERT NLD198800426 3 26400 Beam trawls 42.70 42.1
UK112 WILHELMINA NLD200601985 2 17600 Scottish seines 28.30 26.1
UK12 HOOP OP ZEGEN NLD195500639 5 22000 Beam trawls 21.90 31.0
UK123 ORA ET LABORA NLD196400575 5 22000 Beam trawls 19.03 46.2
UK129 JOHANNES NLD196800029 5 22000 Beam trawls 21.58 59.8
UK147 MORGENSTER NLD199902559 3 26400 Beam trawls 42.35 23.3
UK16 ORION NLD198500400 5 22000 Beam trawls 22.37 0.6
UK166 LIMANDA NLD195700691 5 22000 Beam trawls 23.63 5.9
UK171 SPES SALUTIS NLD196300716 5 22000 Beam trawls 23.46 8.9
UK19 MARJA NETTY NLD198200558 5 44000 Beam trawls 39.55 38.8
UK197 NOORDERLICHT NLD199301821 3 26400 Beam trawls 40.90 18.2
UK200 HENDRIK SR NLD201302056 3 13200 Twin bottom otter trawls 22.65 1.0
UK268 JACOBA ALIJDA DNK000018558 5 44000 Twin bottom otter trawls 25.92 21.5
UK382 JANSSIEN NLD199401870 3 26400 Beam trawls 41.80 5.8
UK45 JACOB WILLEMINA NLD198700579 3 26400 Beam trawls 40.20 27.3
UK46 WILLEKE NLD201740074 3 26400 Beam trawls 41.05 3.0
UK5 VANTAGE DEU000060400 5 44000 Beam trawls 31.65 21.9
UK56 JOHANNA MARIA NLD198300028 5 44000 Beam trawls 40.20 21.4
UK642 BERENDINA DNK000040071 5 44000 Danish seines 27.12 30.3
UK77 ALBERT H NLD196000787 4 8800 Beam trawls 19.14 15.7
UK94 JAN VAN CEES BEL034301957 5 22000 Beam trawls 19.75 8.7
WL18 VRIJHEID BEL010821987 5 22000 Beam trawls 20.86 48.8
WL2 ZEESTER NLD192700490 5 11000 Beam trawls 19.33 72.5
WL22 GERDA NLD198200578 5 11000 Beam trawls 21.00 50.5
WL25 ANTJE NLD191000444 5 11000 Beam trawls 19.80 10.0
WL28 JAN HARMEN NLD192400497 5 22000 Beam trawls 21.48 52.4
WL3 GOEDE VERWACHTING NLD198400643 3 6600 Beam trawls 17.88 50.6
WL39 MONTE SR. NLD199001109 4 17600 Beam trawls 22.06 15.0
WL8 LUBBERT SR NLD190900074 5 22000 Beam trawls 23.92 10.4
WON17 CHARLOTTE NLD190802113 5 22000 Beam trawls 24.25 50.4
WON50 BRIES NLD199602081 5 22000 Beam trawls 20.41 58.2
WR106 CELESTE KARLIJN NLD200202649 3 13200 Beam trawls 23.40 9.7
WR109 BAUKJE ELISABETH NLD200002598 5 22000 Beam trawls 22.69 2.1
WR111 BREEHORN NLD200202677 5 22000 Beam trawls 18.80 4.5
WR112 ZWAANTJE NLD196400548 5 22000 Beam trawls 25.45 54.8
WR123 ANNA JOHANNA NLD198800186 5 22000 Beam trawls 23.54 6.5
WR126 VERTROUWEN NLD195300027 5 22000 Beam trawls 20.50 3.0
WR19 ESPADA NLD196900780 5 44000 Beam trawls 26.98 26.9
WR22 JACQUELINE NLD200302679 3 13200 Beam trawls 22.15 16.1
WR244 HENK JAN NLD198100545 5 22000 Beam trawls 24.45 0.8
WR289 BONA FIDE NLD201513666 3 13200 Beam trawls 23.89 0.7
WR36 WILLEM STEFAN NLD196000824 5 22000 Beam trawls 21.25 61.1
WR40 ANNA CAROLA NLD201302074 5 22000 Beam trawls 23.00 50.5
WR50 CONCORDIA NLD201772013 4 17600 Single boat bottom otter trawls 23.93 33.0
WR54 CORNELIS NAN NLD198400764 5 22000 Beam trawls 19.00 28.6
WR7 JOHANNA NLD198100026 5 22000 Beam trawls 24.45 10.5
WR72 PAULUS HENDRIK NLD192800423 4 8800 Beam trawls 23.38 5.0
WR80 SIMON ALBERT NLD198800495 5 22000 Beam trawls 23.15 1.1
WR88 FIDES MAREM NLD196200805 5 22000 Beam trawls 21.25 10.5
WR9 SHRIMPER NLD198901093 5 22000 Beam trawls 23.95 35.2
YE76 TOBBER NLD198000075 5 22000 Beam trawls 23.85 38.7
YE88 IDA NLD196900982 5 22000 Beam trawls 22.46 45.0
ZK10 VIJKO SR. NLD199402001 5 22000 Beam trawls 21.95 12.9
ZK11 HOOP OP ZEGEN NLD192600587 5 11000 Beam trawls 20.58 5.7
ZK14 EMMA NLD200202647 5 22000 Beam trawls 23.73 1.0
ZK18 LIBERTY NLD199902648 5 11000 Beam trawls 18.80 27.0
ZK23 SEMPER FIDELIS NLD196300631 5 22000 Beam trawls 21.72 10.1
ZK37 ALDERT VAN THIJS NLD194600518 5 22000 Beam trawls 20.34 55.6
ZK46 ZEEMEEUW NLD198400504 5 22000 Beam trawls 23.95 2.7
ZK50 ZEEVALK NLD196700430 5 11000 Beam trawls 18.22 52.6

The following table shows the 72 vessels that switched off their AIS but for which we cannot conclude whether they stopped their fishing activities or not.

Vessels that switched off their AIS but for which we cannot conclude whether they stopped their fishing activities or not
External marking Vessel name CFR Number of weeks subsidized Amount of subsidy (EUR) Fishing gear Length (m) Fraction of time spent with AIS off
ARM15 DE VROUW JANNETJE NLD198800009 4 35200 Beam trawls 45.56 34.6
ARM22 KLAAS ADRIANA NLD199301885 3 26400 Beam trawls 43.99 90.7
ARM44 NEELTJE JANNETJE NLD198500048 5 44000 Beam trawls 45.54 58.9
BR29 EENDRACHT NLD196700024 5 22000 Beam trawls 19.68 58.3
GO23 CORNELIS JANNETJE NLD198900070 4 35200 Beam trawls 39.00 22.9
GO29 JAN MARIA NLD197900093 5 22000 Beam trawls 23.22 50.8
HA11 INEKE NLD192700506 5 11000 Set gillnets (anchored) 20.00 80.6
HA31 INNOVATIE NLD192900389 5 22000 Beam trawls 23.40 33.8
HA62 WILLEM TJITSCHE NLD190500461 5 11000 Beam trawls 19.58 51.6
HD29 MORGENSTER NLD199201750 3 26400 Beam trawls 43.99 43.5
HD32 KLAASJE NLD196800602 5 22000 Beam trawls 22.47 5.8
HD4 HENDRIK PETRONELLA NLD199401895 4 35200 Beam trawls 42.90 53.0
HD42 GRIETJE CORNELIA NLD201872034 4 17600 Beam trawls 23.65 4.3
HK80 SARAH NLD201045176 5 11000 Beam trawls 19.70 100.0
IJM8 RONY NLD198600031 3 13200 Single boat bottom otter trawls 23.50 19.2
LO13 STORMVOGEL NLD198800277 1 2200 Beam trawls 20.20 63.9
LO14 FETSKE NLD192100234 5 11000 Beam trawls 21.61 71.0
MDV1 IMMANUEL NLD201513651 5 44000 Single boat bottom otter trawls 30.15 2.0
OL2 DE VOLHARDING NLD198300352 3 6600 Beam trawls 18.64 25.0
OL37 INSULINDE NLD191000315 5 22000 Beam trawls 20.54 76.6
TH10 DIRKJE NLD199001065 2 8800 Twin bottom otter trawls 23.97 19.0
TM19 REIDERLAND NLD192100347 5 22000 Beam trawls 23.02 70.1
TX1 KLASINA J NLD199602034 1 8800 Beam trawls 42.36 31.9
TX3 BIEM JAN NLD199902545 1 8800 Beam trawls 42.21 39.1
UK136 DRAKKAR BEL025181998 5 44000 Beam trawls 37.81 26.0
UK145 TEUNIS VAN ATJE NLD200002595 5 44000 Pair seines 27.10 22.2
UK150 POLAR NLD201740082 5 44000 Single boat bottom otter trawls 32.00 100.0
UK152 SOLAR NLD198900067 5 44000 Beam trawls 39.06 29.0
UK153 LUB SENIOR NLD201001155 4 35200 Danish seines 28.50 28.3
UK158 WILLEM JACOB NLD199101730 5 44000 Single boat bottom otter trawls 23.97 31.5
UK160 RIEMDA GBR000C19588 4 35200 Twin bottom otter trawls 32.90 52.7
UK161 HENDRIK BRANDS GBR000C16214 5 44000 Beam trawls 42.00 17.1
UK172 SURSUM CORDA NLD199101572 5 44000 Beam trawls 41.35 47.2
UK176 VERWACHTING NLD197500866 5 44000 Beam trawls 33.62 38.1
UK177 CORNELIS EVERT NLD198000872 5 44000 Beam trawls 30.05 32.6
UK184 JOSEPHINA MARIA NLD199802170 1 8800 Beam trawls 42.46 21.8
UK189 GERT JAN GBR000A18852 5 44000 Beam trawls 36.50 28.6
UK195 NOORDERHAAKS NLD199401869 5 44000 Beam trawls 44.03 29.0
UK2 ADRIAANTJE NLD199001075 3 26400 Beam trawls 42.45 30.9
UK205 SPES NOVA NLD201801159 3 26400 Twin bottom otter trawls 32.22 28.9
UK210 CHRISTINA MARIA NLD200102663 5 44000 Twin bottom otter trawls 22.80 31.6
UK22 STELLA POLARIS IRL000I11722 5 44000 Scottish seines 29.80 100.0
UK224 TUNIS VAN LUUT NLD199702111 1 8800 Scottish seines 33.55 13.0
UK227 ORANJE NASSAU NLD199301771 5 44000 Beam trawls 40.90 50.0
UK246 CONCORDIA NLD199201722 3 26400 Beam trawls 40.36 35.4
UK266 JACOBA ALEIDA NLD198400968 3 13200 Beam trawls 23.75 32.5
UK272 ADRIAANTJE GBR000C17393 5 44000 Twin bottom otter trawls 28.00 25.9
UK284 CORNELIS ZEEMAN NLD199201617 5 44000 Beam trawls 41.80 29.3
UK33 WILLEMPJE HOEKSTRA NLD198600627 4 35200 Beam trawls 40.73 29.6
UK34 KOBUS JR NLD199201673 5 44000 Beam trawls 41.35 12.6
UK37 URSA MINOR NLD198000455 5 44000 Single boat bottom otter trawls 35.34 28.6
UK47 IEDE KORNELIS NLD199101413 3 26400 Beam trawls 40.92 59.8
UK68 JELLE KORNELIS NLD199201712 3 13200 Beam trawls 23.94 30.0
UK80 LINQUENDA NLD198300871 5 22000 Beam trawls 24.12 25.3
UK87 MARIA NLD198300822 3 26400 Beam trawls 40.40 24.5
VD6 BRIGITTA BEL030381986 5 22000 Beam trawls 24.54 80.0
VLI25 CINDY NLD198800017 3 26400 Beam trawls 40.20 15.0
WL4 HENDERIKA NLD201102043 5 22000 Beam trawls 19.95 14.6
WR108 STELLA MARIS NLD198502215 5 22000 Twin bottom otter trawls 22.97 34.0
WR143 FRANS NAN NLD200102631 5 22000 Beam trawls 22.25 27.1
WR18 IN SOLIDUM NLD196200482 4 17600 Beam trawls 24.88 2.8
WR189 GRIETJE NLD200702007 5 22000 Beam trawls 23.98 36.1
WR2 DUNJA LYNN NLD200002621 5 22000 Beam trawls 21.15 12.0
WR20 ELISABETH NLD198500893 5 22000 Twin bottom otter trawls 24.44 29.7
WR23 DE VROUW GEERTRUIDA NLD198700629 5 22000 Twin bottom otter trawls 24.69 24.7
WR274 DIRK SENIOR NLD198500986 4 17600 Beam trawls 23.94 40.0
WR29 LAURINA ARIETTA NLD198700225 5 22000 Beam trawls 22.97 27.5
WR71 MARRY AN NLD196000768 5 22000 Beam trawls 19.08 14.4
WR98 ELSE JEANNETTE NLD196000755 5 22000 Beam trawls 23.70 80.4
ZK13 BEREND CORNELIS NLD200202656 5 22000 Beam trawls 23.60 11.5
ZK147 DE KIM NLD198700139 5 22000 Beam trawls 23.92 87.5
ZK87 PIETERNELLE HELENA NLD199201655 5 22000 Beam trawls 23.88 47.3

2.1.4 Bar codes

Bar codes are created to represent the activity (fishing days according to both PEFA and GFW, days when the AIS was switched off, landing days in PEFA auctions) of each of the 254 vessels that were subsidized. Plots are located in Output/Figures/Barcodes/.

The black unfilled rectangle indicates the temporary cessation period. The red vertical lines indicate the landing dates in PEFA auctions. The black bars correspond to the fishing days on GFW. The grey bars correspond to days when AIS was switched off on GFW. The blue horizontal lines ontop of each bar codes indicate the fishing periods indicated in PEFA.

2.1.5 Evidence that some vessels switch of their AIS while fishing

The following table indicates the vessels that fished while their AIS was switched off. If during two landings in one of the PEFA auction, a given vessel had its AIS off and no fishing days recorded, it means it was fishing while its AIS was off.

Number of time a vessel fished while its AIS was switched off
external_marking vessel_name cfr group count
SL27 JOHANNES NLD198700088 ais off_TC culprit 16
KW36 MARGRIET NLD200402698 ais off_TC culprit 11
KW88 PELIKAAN NLD199802200 ais off_TC culprit 11
GO38 DE VERTROUWEN NLD200202651 ais off_TC culprit 10
GO48 CORNELIS SENIOR NLD199201770 ais off_ TC not culprit 9
SL42 JAN CORNELIS III NLD199201710 ais off_ TC not culprit 9
UK642 BERENDINA DNK000040071 ais off_TC culprit 9
WR274 DIRK SENIOR NLD198500986 ais off_TC unknown 8
GO20 MARIA NLD198800086 ais off_TC culprit 7
KW145 CATHARINA NLD200602669 ais off_TC culprit 6
KW34 ROSEMARIE NLD199702084 ais off_TC culprit 6
TX29 HELENA ELIZABETH NLD198500146 ais off_TC culprit 6
TX3 BIEM JAN NLD199902545 ais off_TC unknown 5
UK1 ALBERT NLD198800426 ais off_TC culprit 5
ARM22 KLAAS ADRIANA NLD199301885 ais off_TC unknown 4
OD6 ZELDEN RUST NLD198700281 ais off_TC culprit 4
TX94 AVONTUUR NLD199301725 ais off_TC culprit 4
WR108 STELLA MARIS NLD198502215 ais off_TC unknown 4
WR20 ELISABETH NLD198500893 ais off_TC unknown 4
GO22 JAN CORNELIS NLD200602662 ais off_TC culprit 3
GO23 CORNELIS JANNETJE NLD198900070 ais off_TC unknown 3
GO37 EBEN HAËZER NLD200002596 ais off_TC culprit 3
GO44 QUO VADIS NLD199001042 ais off_TC culprit 3
GO5 ORA ET LABORA NLD200302680 ais off_TC culprit 3
KW14 JOLISSA NLD200402702 ais off_TC culprit 3
UK45 JACOB WILLEMINA NLD198700579 ais off_TC culprit 3
WR189 GRIETJE NLD200702007 ais off_TC unknown 3
WR67 MAARTJE NLD196800728 ais off_ TC not culprit 3
ARM18 JORIS SENIOR NLD199201721 ais off_TC culprit 2
GO26 AREND JAN NLD200202640 ais off_TC culprit 2
HA11 INEKE NLD192700506 ais off_TC unknown 2
LO28 MARE FRISICUM DEU401110101 ais off_ TC not culprit 2
UK112 WILHELMINA NLD200601985 ais off_TC culprit 2
UK145 TEUNIS VAN ATJE NLD200002595 ais off_TC unknown 2
UK224 TUNIS VAN LUUT NLD199702111 ais off_TC unknown 2
WR19 ESPADA NLD196900780 ais off_TC culprit 2
WR23 DE VROUW GEERTRUIDA NLD198700629 ais off_TC unknown 2
ARM15 DE VROUW JANNETJE NLD198800009 ais off_TC unknown 1
ARM7 JAN SENIOR NLD198700003 ais off_ TC not culprit 1
HD4 HENDRIK PETRONELLA NLD199401895 ais off_TC unknown 1
SL45 STELLAR NLD200113658 ais off_ TC not culprit 1
TH5 ADRIANA MAATJE NLD198500414 ais off_ TC not culprit 1
TX1 KLASINA J NLD199602034 ais off_TC unknown 1
TX14 GRIETJE NLD199201675 ais off_TC culprit 1
TX19 ELISABETH CHRISTINA NLD200302695 ais off_TC culprit 1
UK197 NOORDERLICHT NLD199301821 ais off_TC culprit 1
UK46 WILLEKE NLD201740074 ais off_TC culprit 1
UK95 AART MAASKANT NLD199301890 ais off_ TC not culprit 1
WR29 LAURINA ARIETTA NLD198700225 ais off_TC unknown 1

2.2 Focus on PEFA data

2.2.1 Further cleaning and adding informations

2.2.1.1 Adding the auction

We then merge the data with the name of the auction where each landing has been made.

# we extract all the date/landing combination in order to manually search of the PEFA website the corresponding auction.

write.xlsx(emff_covid_pefa %>%
  select (date, external_marking) %>%
    arrange(date), 
           "Output/Data/List of illegal landings with no auction - To be cleaned.xlsx")

emff_covid_pefa <- emff_covid_pefa %>%
  left_join(read.xlsx("Data/Processed/List of illegal landings with no auction_cleaned.xlsx") %>%
  mutate (date = as.Date(date, origin = "1899-12-30")), by = c("date", "external_marking"))

2.2.1.2 Adding the detailed list of landings

We then load and clean the detailed list of landings. This detailed list has been made by manually searching on the PEFA website the detailed landing data for each vessel and for each landing day.

landing_detail <- read.xlsx("Data/Processed/List of detailed landings to get.xlsx", sheet = "CAPTURES") %>%
  bind_rows(read.xlsx("Data/Processed/List of detailed landings to get.xlsx", sheet = "PULS")) %>%
  select (date = Date, 
          external_marking = vessel,
          quality = Qualité,
          sold = Vendu,
          weight = Poids, 
          msc = Cert,
          metadata = espèce.et.taille) %>% 
  mutate(date = as.Date(date, origin = "1899-12-30"), 
         weight = as.numeric(gsub("[^0-9]", "", weight)),
         metadata = str_extract(metadata, "^.+\\d{3}\\s\\d{4}-\\d{4}\\s[A-Z]{2}")) %>%
  mutate(metadata = paste0(metadata, " ", quality),
         external_marking = gsub(" ","",external_marking),
         external_marking = str_remove_all(external_marking, c("\\\"|\\\r|\\\n|\\*|/UFA| ?|-?")),
         external_marking =str_replace(external_marking, "^([a-zA-Z]+)(0|-)([0-9]+)$", "\\1\\3"))
         

emff_covid_pefa <- emff_covid_pefa %>%
  left_join(landing_detail, by = c("date", "external_marking"))

rm(landing_detail)

At this stage, the database contains 17426 lines with the detailed landings for all vessels that landed in PEFA auctions during their temporary cessation. For 198 out of the 784 vessel/landing date combinations, we were not able to have the detailed list of landings, only the total weight that was landed. Out of the 17426 lines, 63 lines were duplicated. This is due to the fact that some landing operations in the detailed list were the same, i.e. a vessel could have landed the same type of fish (species, size, quality, weight, etc.) two times, which gives two exact same lines in the database.

2.2.1.3 Adding the market prices

We extract all the combinations of landing days/auctions. This list will be used to manually search on the PEFA website the market prices associated with these day/auction combinations.

write.xlsx(emff_covid_pefa %>%
  select(date, auction) %>%
  distinct () %>% 
    arrange(date), 
  "Output/Data/List of market prices - To be cleaned.xlsx")

After manually search on the PEFA website, we can then load the market prices.

# we load the market prices and do some cleaning of the data.

market_prices <- read.xlsx("Data/Processed/List of market prices_cleaned.xlsx") %>%
  rename(price_mean = Prix.Moy., price_max = Prix.Max.) %>%
  mutate (Taille = str_remove(Taille, "\\s[A-Z]+"),
    metadata = paste0(Espèce, " ", Taille, " ",Info, " ",Qual.), 
    date = as.Date(date, format = "%d/%m/%Y"),
    price_mean=str_remove(price_mean, " EUR"), 
    price_max = str_remove(price_max, " EUR"),
    price_mean=str_replace(price_mean, ",", "."), 
    price_max = str_replace(price_max, ",", ".")) %>%
  mutate_at(vars(c("price_mean", "price_max")), ~as.numeric(.)) %>%
  select (-c(Espèce, Taille, Qual., Info, App.))

# Some rows in market_prices are duplicated for a given species/size class/quality/state, because we can have different forms of fish (e.g. for the turbot fish) which have not the same price. However, we do not have information about the forms, we can only see in our data that a given species/size class/quality/state has different prices, resulting in duplicated lines. For these duplicated lines, we calculate the mean price and keep only one record. 

market_prices <- market_prices %>% 
    group_by(date, auction, metadata) %>% 
    mutate (count = n()) %>% 
    arrange(desc(count)) %>% 
    filter (count>1) %>% 
    mutate_at(vars(matches(c("price_mean", "price_max"))), ~mean(.)) %>% 
    ungroup() %>% 
    distinct () %>%
    bind_rows(
    market_prices %>% 
    group_by(date, auction, metadata) %>% 
    mutate (count = n()) %>% 
    arrange(desc(count)) %>% 
    filter (count == 1) %>%
        ungroup ()) %>%
  select (-count)

We then merge the market prices with the landing data. It will allow to calculate the turnover for each fishing vessel.

emff_covid_pefa <- emff_covid_pefa %>%
  left_join(market_prices, by = c("date", "auction", "metadata"))

We simplify the gear names that come from the PEFA website (and which are more detailed than those from the fleet register).

emff_covid_pefa <- emff_covid_pefa %>%
  mutate (pefa_gear_category = ifelse(pefa_gear %in% c("EUROBEAMER RFS", "A TANGON", "EUROBEAMER", "CHALUT", "TWIN TRAWLING","TWINRIG RFS", "SUMWING RFS", "SUMWING"), "Conventional bottom trawl",
          ifelse(pefa_gear %in% c("PULS WING", "PULSATING TRAWL"), "Electric trawl",
  ifelse (pefa_gear == "SEINE NET(F)", "Demersal seine",
          ifelse(pefa_gear == "GILLNET RFS", "Net", pefa_gear))))) %>%
  relocate (pefa_gear_category, .after = pefa_gear)

For 67 out of the 17228 detailed landing rows, the matching between the detailed landing and the market prices did not work. The metadata in the detailed landing could not be found in the market prices. In this case we search the species in the market prices without taking into account the whole metadata (size, quality, etc.). If there is more than one row associated with the species in the market prices, we calculate the mean price for this species.

emff_covid_pefa <- emff_covid_pefa %>%
  filter (!(!is.na(metadata) & is.na(price_mean))) %>%
  bind_rows(emff_covid_pefa %>% 
  filter (!is.na(metadata) & is.na(price_mean)) %>%
   mutate(species = str_extract(metadata, "[A-Z]+(\\s[A-Z]+)?")) %>% 
  left_join(market_prices %>%
              mutate(metadata = str_extract(metadata, "[A-Z]+(\\s[A-Z]+)?")) %>%
              rename (species = metadata) %>%
              group_by(date, auction, species) %>%
              summarise (price_mean = mean(price_mean),
                         price_max = mean(price_max)), by = c("date", "auction", "species")) %>%
  rename (price_mean = price_mean.y, price_max = price_max.y) %>% 
  select (-price_mean.x, -price_max.x, -species))

At this stage, there is 35 out of the 17228 detailed landings that did not match with the market prices register because, for unknown reasons, the species that was sold for a given day/auction was not registered in the market prices.

We then calculate for each landing (i.e. line of the dataset) the turnover. We then merge the dataset with a list of vessels that have practiced electric fishing in the past. This list can be found in the following link : http://www.bloomassociation.org/en/wp-content/uploads/2020/09/beyond-illegal-annexes.pdf

emff_covid_pefa  <- emff_covid_pefa  %>% 
  mutate (price_mean_total = price_mean * weight, 
          price_max_total = price_max * weight) %>% 
  left_join(read.xlsx("Data/Processed/list of electric trawlers.xlsx") %>% 
              select ("Ext.Mark") %>% 
              rename(external_marking = Ext.Mark) %>% 
              mutate (external_marking = gsub(" ","",external_marking), 
                      external_marking =str_replace(external_marking, "^([a-zA-Z]+)(0|-)([0-9]+)$", "\\1\\3"),
                      electric_fishing = "YES"), by = "external_marking") %>%
  mutate(electric_fishing = ifelse(is.na(electric_fishing), "NO", electric_fishing))

2.2.1.4 Estimating the turnover for the ‘incomplete’ landings

Then, we estimate the turnover for the incomplete landings, i.e. those for which we do not have the detail of the species fished, but only the the total weight landed. To do this, we compare these incomplete landings with the detailed landings for which fishes were fished by the same type of vessels and which were landed in the same auction (independently of the day). There is 198 landing operations for which we do not have the landing details, i.e., 25.3 % of the landing operations. In terms of volume landed, these incomplete landings represent 1184.6 tons, i.e., 29.1 % of the total volume landed.

# we first isolate incomplete landings

culprits_unmatched <- emff_covid_pefa %>% 
  filter(is.na(metadata)) %>%
  select(external_marking, vessel_name, date, auction, pefa_gear, landings) %>%
  mutate (pefa_gear = ifelse(pefa_gear == "SUMWING RFS", "SUMWING", pefa_gear)) # we assume these two type of vessels are similar enough, it will help to get a match for for all incomplete landings.

# we also isolate detailed landings. 
culprits_matched <- emff_covid_pefa %>%
  filter(!is.na(metadata)) %>%
  select(external_marking, vessel_name, date, auction, pefa_gear, weight, metadata, price_mean_total, price_max_total) %>%
  mutate (pefa_gear = ifelse(pefa_gear == "SUMWING RFS", "SUMWING", pefa_gear))

# we compare incomplete landings and search for detailed landings in the same auction and with the same type of vessel.

output  <- NULL;

for (i in 1:nrow(culprits_unmatched)) { 
  tmp <- culprits_matched %>% 
  filter(auction == culprits_unmatched$auction[i] & pefa_gear == culprits_unmatched$pefa_gear[i])

if (nrow(tmp) == 0) { # for the gear used by the vessel SL45 (SEINE NET(F)) is not used by any other vessels landing in the same auction.
  tmp <- culprits_matched %>% 
  filter(pefa_gear == culprits_unmatched$pefa_gear[i])
}

tmp <- tmp %>%
    mutate(price_mean = sum(price_mean_total, na.rm = T)/ sum(weight, na.rm = T),
         price_max = sum(price_max_total, na.rm = T)/ sum(weight, na.rm = T)) %>%
  select (price_mean, price_max) %>%
  distinct ()
  
output <- rbind(output, tmp) #output contains the estimated prices of fish per kilogram for each incomplete landings. 

}

# we merge the incomplete landing records with the respective estimated price of fish per kg 
culprits_unmatched <- culprits_unmatched %>%
  bind_cols(output) 

We finally estimate the turnover for the incomplete landings based on the estimated prices of fish per kg.

emff_covid_pefa <- emff_covid_pefa %>%
  filter(!is.na(metadata)) %>%
  mutate (price = "Real prices") %>%
  bind_rows(emff_covid_pefa %>%
  filter(is.na(metadata)) %>% 
    select(-c("price_mean", "price_max")) %>% 
    left_join(culprits_unmatched %>% 
                select (-c("vessel_name", "auction", "pefa_gear")) %>% 
                mutate (price = "Estimated prices"), by = c("external_marking", "date", "landings")) %>% 
    mutate (price_mean_total = price_mean * landings, 
            price_max_total = price_max * landings))

At this stage, after having estimated the turnover for the incomplete landings, we know that 45 dutch vessels landed in PEFA auctions and illegally fished during COVID-19 temporary cessation while they were receiving subsidies from the EMFF.

Based on the mean market price, these vessels have earned 10,579,857 € taking into account both the ‘real’ and ‘estimated’ turnover over the whole temporary cessation period. Based on the mean market price, they have earned 7,533,031 € taking into account only the ‘real’ turnover. Based on the mean market price, they have earned 3,046,826 € taking into account only the ‘estimated’ turnover. Based on the maximum market price, they have earned 11,817,793 € taking into account both the ‘real’ and ‘estimated’ turnover. Based on the max market price, they have earned 8,398,246 € taking into account only the ‘real’ turnover. Based on the max market price, they have earned 3,419,547 € taking into account only the ‘estimated’ turnover.

If we add all the vessels that landed in PEFA and for which there is a suspicion of fraud (since many vessels have an incomplete AIS record and are not able to justify they have respected the “no fishing during 7 consecutive days per week subsidized” rule), we reach 75 vessels.

Based on the mean market price, these vessels have earned 13,933,795 € taking into account both the ‘real’ and ‘estimated’ turnover. Based on the mean market price, they perceived in total 10,483,073 € taking into account only the ‘real’ turnover. Based on the mean market price, they have earned 3,450,721 € taking into account only the ‘estimated’ turnover. Based on the maximum market price, they have earned 15,472,502 € taking into account both the ‘real’ and ‘estimated’ turnover. Based on the max market price, they have earned 11,611,016 € taking into account only the ‘real’ turnover. Based on the max market price, they have earned 3,861,486 € taking into account only the ‘estimated’ turnover.

2.2.2 Turnover, subsidies perceived and total weight of fish sold by the culprit and suspicous vessels that landed in PEFA auctions

The following three figures include all the vessels that landed in PEFA and which have not respected the “no fishing during 7 consecutive days per week subsidized” rule as well as those which are not able to justify the respect of the rule because they switched off their AIS.

The following figure combines both the ‘real’ and ‘estimated’ turnover. Each bar was calculated based on the mean market price. The “standard deviation” was calculated based on the maximum price of the market. For some vessels, the total height of the bar is the sum of the ‘real’ (shown in a darker color) and ‘estimated’ (shown in a lighter color) turnover. For these vessels, the total height of the standard deviation is also the sum of the height of the standard deviation for the ‘real’ and ‘estimated’ turnover.

Then, we look at the EMFF subsidies perceived by the culprit vessels.

Then, we look at the total weight of fish landed by the culprit vessels.

2.2.3 MSC certified products sold in PEFA auctions by the culprit and suspicious vessels

The following table shows the name and characteristics of the vessels that did not respect TC rules and sold MSC certified products.

Summary of culprit and suspicious vessels that landed MSC certified products in PEFA auctions
external_marking vessel_name cfr pefa_gear length electric_fishing MSC_landings Total_landings MSC_perc MSC_landed_while_ais_off culprit
UK5 VANTAGE DEU000060400 SUMWING 31.65 NO 89122 114852 77.6 TRUE
UK19 MARJA NETTY NLD198200558 SUMWING 39.55 YES 53884 68251 78.9 TRUE
GO38 DE VERTROUWEN NLD200202651 A TANGON 42.37 YES 3214 60897 5.3 3214 TRUE
UK225 AUKE SENIOR NLD201901148 CHALUT 30.15 NO 2813 3841 73.2 TRUE
UK200 HENDRIK SR NLD201302056 CHALUT 22.65 NO 934 1545 60.5 TRUE
UK56 JOHANNA MARIA NLD198300028 SUMWING 40.20 NO 238 1201 19.8 TRUE
UK136 DRAKKAR BEL025181998 A TANGON 37.81 NO 47346 56846 83.3 UNKNOWN
ZK87 PIETERNELLE HELENA NLD199201655 CHALUT 23.88 NO 16761 17808 94.1 UNKNOWN
UK172 SURSUM CORDA NLD199101572 SUMWING 41.35 YES 15394 19310 79.7 UNKNOWN
HD42 GRIETJE CORNELIA NLD201872034 TWIN TRAWLING 23.65 NO 3531 27327 12.9 UNKNOWN

The following figure shows the turnover made by the culprit and suspicious vessels by selling MSC certified products during the temporary cessation period.

The following figure shows the weight of the MSC certified products sold by the culprit and suspicious vessels that landed in PEFA.